In computer networks, end nodes communicate with each other by exchanging units of data, such as packets, over the network. Under various circumstances, it is possible for an end node in a computer network to become congested. This type of congestion refers to the near depletion of available buffer space in an end node host memory or network device, e.g., network adapter. Typically, host memory buffers are allocated for use by an adapter via a free buffer pool (i.e., pointers to the available buffers). When the end node becomes congested due to a shortage of available buffers for storing received packets and packets received from the network begin to build up at the network device, packet data loss is likely to occur.
Traditionally, end nodes in computer networks have employed various congestion control schemes to control and, if possible, to avoid congestion. In these schemes, network devices provide congestion information to the host system. In response, the host system takes steps to reduce the level of congestion.
In a cell-based network adapter, such as an ATM adapter, which performs packet reassembly on cells received from the network on a given virtual circuit (VC), the host system typically empties and reposts host memory buffers or slots on packet boundaries only. If many VCs are active simultaneously, with a high degree of interleaving on the physical link, and the packets being received are large in comparison to the size of the buffers (such that a single packet occupies many buffers), then there is the potential for a given VC over which a packet is being carried to consume buffer memory space at the expense of other packets and other simultaneously active VCs.
Also of concern is the problem of free buffer pool exhaustion. If the free buffer pool is allowed to become empty and the buffer memory is occupied by partially assembled packets, then reassembly deadlock will occur. Consequently, packet reassembly may not proceed until more buffers are provided via the free buffer pool or some partially assembled packets are discarded.
Therefore, there is a need in the art for a congestion control scheme that controls and avoids congestion on a per-VC basis, as well as minimizes the potential for reassembly deadlock to occur.